#ifndef XSDL_H
#define XSDL_H
#include "xvideo_view.h"

struct SDL_Window;
struct SDL_Renderer;
struct SDL_Texture;

class XSDL : public XVideoView
{
public:
    explicit XSDL();
    // 初始化渲染窗口 线程安全可多次调用（不会窗口，但会重新创建渲染器和纹理）
    // @param w,h 视频分辨率
    // @param fmt 视频格式
    // @param win_id 窗口句柄，如果为空，那么会生成一个窗口
    // @return 成功返回true
    bool Init(int w, int h,
              Format fmt = RGBA) override;
    // 渲染图像 线程安全（主要是考虑和Init的互斥）
    // @param data 图像数据
    // @param linesize 图像数据行字节数，对于yuv420p，为y一行的字节数
    // 如果linesize<=0，那么根据视频格式计算（对齐方式无法确定）
    // @return 成功返回true
    bool Draw(const uint8_t *data, int linesize = 0) override;
    bool Draw(const uint8_t *y, int y_pitch,
              const uint8_t *u, int u_pitch,
              const uint8_t *v, int v_pitch) override;
    
    void Close() override;

    bool IsExit() override;

protected:
    SDL_Window *win_ = nullptr;
    SDL_Renderer *renderer_ = nullptr;
    SDL_Texture *texture_ = nullptr;
};

#endif // XSDL_H